﻿using CREAPA.RepositorioADO;
using CREAPA.UL.Web.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CREAPA.UL.Web.Controllers
{
    public class DossieController : Controller
    {
        DossieRepositorioADO dossieADO = new DossieRepositorioADO();
        private siscreaEntitiesBD db = new siscreaEntitiesBD();
        string filename = "";

        [Authorize]
        public ActionResult Index(string login)
        {
            //Lista Dossie do Funcionario
            var listaDossieFuncionario = dossieADO.ListarDossie(login);
            ViewBag.listaDossie = listaDossieFuncionario;
            ViewBag.Login = login;
            TempData["Login"] = login;
            TempData.Keep("Login");
            return View();
        }

        [Authorize]
        public ActionResult Cadastrar()
        {
            ViewBag.TipoDocumento = new SelectList(db.TipoDocDossies.OrderBy(p => p.Nome), "Id", "Nome");
            ViewBag.Login = TempData["Login"];
            TempData.Keep("Login");
            return View();
        }

        [HttpPost]
        public ActionResult Cadastrar(CREAPA.Dominio.Dossie dossie)
        {
            ViewBag.TipoDocumento = new SelectList(db.TipoDocDossies.OrderBy(p => p.Nome), "Id", "Nome");

            if (ModelState.IsValid)
            {
                if (Request.Files["ArquivoDossie"].FileName != "")//Algum arquivo foi anexado
                {
                    var login = TempData["Login"];
                    ViewBag.Login = login;
                    dossie.PessoaInteressado = login.ToString();
                    dossie.PessoaCadastrou = User.Identity.Name;
                    dossie.DataCadastro = DateTime.Now;
                    var tipoDoc = dossieADO.NomeTipoDoc(dossie.TipoDocumento);
                    string doc = tipoDoc.TipoDocumento;

                    foreach (string upload in Request.Files)
                    {
                        if (Request.Files[upload].ContentLength == 0) continue;
                        string pathToSave = Server.MapPath("~/Views/Documentos/Dossie/" + dossie.PessoaInteressado + "/" + doc + "/");
                        CriarPasta(pathToSave);
                        filename = DateTime.Now.Date.ToString().Replace("/", "").Replace(":", "").Replace(" ", "") + "-" + Path.GetFileName(Request.Files[upload].FileName);
                        Request.Files[upload].SaveAs(Path.Combine(pathToSave, filename));
                        dossie.Caminho = pathToSave + filename;
                    }
                    dossieADO.Salvar(dossie);
                    return RedirectToAction("Index", new { Login = login });
                }
                else
                {
                    ModelState.AddModelError("", "Você deve selecionar um arquivo para anexar.");
                }
            }
            return View(dossie);
        }

        [Authorize]
        public ActionResult Excluir(int id)
        {
            ViewBag.Login = TempData["Login"];
            TempData.Keep("Login");
            var ListaDoc = dossieADO.ListarPorId(id);
            ViewBag.TipoDocumento = new SelectList(db.TipoDocDossies.OrderBy(p => p.Nome), "Id", "Nome");
            if (ListaDoc == null)
            {
                return HttpNotFound();
            }
            return View(ListaDoc);
        }

        [HttpPost, ActionName("Excluir")]
        [ValidateAntiForgeryToken]
        public ActionResult ExcluirConfirmado(int id)
        {
            var ListaDoc = dossieADO.ListarPorId(id);
            if (System.IO.File.Exists(@ListaDoc.Caminho))
            {
                System.IO.File.Delete(@ListaDoc.Caminho);
                dossieADO.Excluir(id);
            }
            else
            {
                ModelState.AddModelError("", "Este Documento não existe.");
            }

            return RedirectToAction("Index", new { Login = ListaDoc.PessoaInteressado });
        }

        private void CriarPasta(string nomePasta)
        {
            string directoryPath = nomePasta;
            if (!Directory.Exists(directoryPath))
            {
                Directory.CreateDirectory(directoryPath);
            }
        }

        public ActionResult Download(string caminho)
        {
            string nome = "";
            int pos = 0;
            string path = caminho;
            string fileName = "";
            do
            {
                pos = caminho.IndexOf("\\");
                if (pos != -1)
                {
                    nome = caminho.Substring(0, pos);
                    caminho = caminho.Substring(pos + 1);
                }
                else//último elemento da lista
                {
                    fileName = caminho;
                }
            }
            while (pos != -1);
            byte[] fileBytes = System.IO.File.ReadAllBytes(path);
            return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
        }
    }
}
